//package com.gpframework.module.controller.order;
//
//import cn.hutool.db.sql.Order;
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//
//import java.math.BigDecimal;
//import java.math.RoundingMode;
//import java.util.*;
//
//import cn.hutool.core.convert.Convert;
//import cn.hutool.core.lang.TypeReference;
//import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
//import com.gpframework.common.core.domain.entity.SysDept;
//import com.gpframework.common.core.domain.entity.SysUser;
//import com.gpframework.common.enums.*;
//import com.gpframework.common.exception.ParamException;
//import com.gpframework.common.utils.Arith;
//import com.gpframework.common.utils.DateUtils;
//import com.gpframework.common.utils.StringUtils;
//import com.gpframework.module.order.domain.GpFlowConfig;
//import com.gpframework.module.order.domain.GpOrder;
//import com.gpframework.module.order.domain.req.GpOrderUpdate;
//import com.gpframework.module.order.service.IGpFlowConfigService;
//import com.gpframework.module.order.service.IGpOrderService;
//import com.gpframework.module.system.mapper.SysDeptMapper;
//import com.gpframework.module.system.mapper.SysUserMapper;
//import lombok.RequiredArgsConstructor;
//import org.apache.commons.collections4.CollectionUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.transaction.annotation.Transactional;
//import org.springframework.validation.annotation.Validated;
//import org.springframework.web.bind.annotation.GetMapping;
//import org.springframework.web.bind.annotation.PostMapping;
//import org.springframework.web.bind.annotation.PutMapping;
//import org.springframework.web.bind.annotation.DeleteMapping;
//import org.springframework.web.bind.annotation.PathVariable;
//import org.springframework.web.bind.annotation.RequestBody;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;
//import com.gpframework.common.annotation.Log;
//import com.gpframework.common.core.controller.BaseController;
//import com.gpframework.common.core.domain.AjaxResult;
//import com.gpframework.module.order.domain.GpOrderFlow;
//import com.gpframework.module.order.domain.vo.GpOrderFlowVo;
//import com.gpframework.module.order.domain.req.GpOrderFlowReq;
//import com.gpframework.module.order.domain.req.GpOrderFlowAdd;
//import com.gpframework.module.order.domain.req.GpOrderFlowUpdate;
//import com.gpframework.module.order.service.IGpOrderFlowService;
//import com.gpframework.common.utils.poi.ExcelUtil;
//import javax.validation.Valid;
//import io.swagger.annotations.*;
//import com.gpframework.common.core.page.TableDataInfo;
///**
// * @ClassName GpOrderFlowController
// * @Author gpframework
// * @Date 2023-06-16
// * @Version 1.0.0
// * @Description 员工订单流转详情Controller 接口类
// */
//@Validated
//@Api(tags = "员工订单流转详情")
//@RequiredArgsConstructor(onConstructor_ = @Autowired)
//@RestController
//@RequestMapping("/order/orderFlow" )
//public class GpOrderFlowController extends BaseController {
//
//    private final IGpOrderFlowService iGpOrderFlowService;
//    private final IGpOrderService iGpOrderService;
//
// /**
//  * @Description 分页
//  * @Author gpframework
//  * @Date 2023-06-16
//  * @Param gpOrderFlow
//  * @Return TableDataInfo
// */
//    @ApiOperation("列表")
//    @GetMapping("/list")
//    public TableDataInfo<GpOrderFlowVo> list(GpOrderFlowReq gpOrderFlowReq)
//    {
//        startPage();
//        QueryWrapper<GpOrderFlow> lqw = new QueryWrapper<GpOrderFlow>();
//        gpOrderFlowReq.generatorQuery(lqw,true);
//        List<GpOrderFlowVo> list = iGpOrderFlowService.listVo(lqw);
//        return getDataTable(list);
//    }
//
//    /**
//     * @Description 详情
//     * @Author gpframework
//     * @Date 2023-06-16
//     * @Param gpOrderFlow
//     * @Return AjaxResult
//     */
//    @ApiOperation("详情")
//    @GetMapping(value = "/{id}" )
//    public AjaxResult<GpOrderFlowVo> getInfo(@PathVariable("id" ) Long id) {
//        return AjaxResult.success(iGpOrderFlowService.getVoById(id));
//    }
//
//    /**
//     * @Description 新增
//     * @Author gpframework
//     * @Date 2023-06-16
//     * @Param gpOrderFlow
//     * @Return AjaxResult
//     */
//    @ApiOperation("新增")
//    @PostMapping
//    public AjaxResult add(@Valid @RequestBody GpOrderFlowAdd gpOrderFlowAdd) {
//        GpOrderFlow gpOrderFlow = Convert.convert(new TypeReference<GpOrderFlow>() {}, gpOrderFlowAdd);
//        return toAjax(iGpOrderFlowService.save(gpOrderFlow) ? 1 : 0);
//    }
//
//    /**
//     * @Description 修改
//     * @Author gpframework
//     * @Date 2023-06-16
//     * @Param gpOrderFlow
//     * @Return AjaxResult
//     */
//    @ApiOperation("修改")
//    @PutMapping
//    public AjaxResult edit(@Valid @RequestBody GpOrderFlowUpdate gpOrderFlowUpdate) {
//        GpOrderFlow gpOrderFlow = Convert.convert(new TypeReference<GpOrderFlow>() {}, gpOrderFlowUpdate);
//        return toAjax(iGpOrderFlowService.updateById(gpOrderFlow) ? 1 : 0);
//    }
//
//    /**
//     * @Description 删除
//     * @Author gpframework
//     * @Date 2023-06-16
//     * @Param gpOrderFlow
//     * @Return AjaxResult
//     */
//    @ApiOperation("删除")
//    @DeleteMapping("/{ids}" )
//    public AjaxResult remove(@PathVariable Long[] ids) {
//        return toAjax(iGpOrderFlowService.removeByIds(Arrays.asList(ids)) ? 1 : 0);
//    }
//
//    /**
//     * @Description 确认
//     * @Author gpframework
//     * @Date 2023-06-16
//     * @Param gpOrder
//     * @Return AjaxResult
//     */
//    @ApiOperation("确认")
//    @PostMapping("/confirm")
//    public AjaxResult confirm(@Valid @RequestBody GpOrderFlowUpdate gpOrderFlowUpdate) {
//        String confirm = iGpOrderFlowService.confirm(gpOrderFlowUpdate);
//        if (StringUtils.isNotBlank(confirm)) {
//            return AjaxResult.error(510, confirm);
//        }
//        return AjaxResult.success();
//    }
//
//    /**
//     * @Description 撤回
//     * @Author gpframework
//     * @Date 2023-06-16
//     * @Param gpOrder
//     * @Return AjaxResult
//     */
//    @ApiOperation("撤回")
//    @PostMapping("/withdraw")
//    public AjaxResult withdraw(@Valid @RequestBody GpOrderFlowUpdate gpOrderFlowUpdate) {
//        String withdraw = iGpOrderFlowService.withdraw(gpOrderFlowUpdate);
//        if (StringUtils.isNotBlank(withdraw)) {
//            return AjaxResult.error(510, withdraw);
//        }
//        return AjaxResult.success();
//    }
//
//    /**
//     * @Description 中转
//     * @Author gpframework
//     * @Date 2023-06-16
//     * @Param gpOrder
//     * @Return AjaxResult
//     */
//    @ApiOperation("中转")
//    @PostMapping("/transfer")
//    public AjaxResult transfer(@Valid @RequestBody GpOrderFlowUpdate gpOrderFlowUpdate) {
//        String transfer = iGpOrderFlowService.transfer(gpOrderFlowUpdate);
//        if (StringUtils.isNotBlank(transfer)) {
//            return AjaxResult.error(510, transfer);
//        }
//        return AjaxResult.success();
//    }
//
//    /**
//     * @Description 附件上传（物流单/自提）
//     * @Author gpframework
//     * @Date 2023-06-16
//     * @Param gpOrder
//     * @Return AjaxResult
//     */
//    @ApiOperation("附件上传（物流单/自提）")
//    @PostMapping("/uploadAnnex")
//    public AjaxResult uploadAnnex(@Valid @RequestBody GpOrderFlowUpdate gpOrderFlowUpdate) {
//        GpOrderFlow gpOrderFlow = iGpOrderFlowService.getById(gpOrderFlowUpdate.getId());
//        if (gpOrderFlow == null) {
//            return AjaxResult.error("订单不存在");
//        }
//        List<String> annexList = gpOrderFlowUpdate.getAnnexList();
//        if (CollectionUtils.isNotEmpty(annexList)) {
//            gpOrderFlow.setAnnex(String.join(",", annexList));
//        }
//        gpOrderFlow.setStatus(gpOrderFlowUpdate.getStatus());
//        gpOrderFlow.setUploadTime(new Date());
//        iGpOrderFlowService.updateById(gpOrderFlow);
//        if (StringUtils.equals(gpOrderFlow.getDestinationType(), DestinationTypeEnum.LOGISTICS.getKey())) {
//            // 如果选择物流，需要流转至‘完成’
//            GpOrder gpOrder = iGpOrderService.getById(gpOrderFlow.getOrderId());
//            if (gpOrder != null && StringUtils.equals(gpOrder.getOrderStatus(), OrderStatusEnum.IN_TRANSIT_DELIVERY.getKey())) {
//                UpdateWrapper<GpOrder> orderUpdateLqw = new UpdateWrapper<>();
//                orderUpdateLqw.set("version", gpOrder.getVersion() + 1).eq("version", gpOrder.getVersion()).eq("id", gpOrder.getId());
//                orderUpdateLqw.set("order_status", OrderStatusEnum.COMPLETE.getKey());
//                orderUpdateLqw.set("order_duration", DateUtils.getDateMinDiff(new Date(), gpOrder.getCreateTime()));
//                orderUpdateLqw.eq("id", gpOrder.getId());
//                iGpOrderService.update(orderUpdateLqw);
//            }
//        }
//        return AjaxResult.success();
//    }
//}
